\documentclass{article}
\input{defines}
\input{packages}
\input{coverpage}

\title{\killerbeez{} API}
\author{GRIMM}
\date{\apiDate{}}

\begin{document}
% Nice cover page
\thispagestyle{empty}
\maketitle
\newpage

% Table of Contents
\tableofcontents
\newpage

\section{Overview}
This document will cover the version \apiVersion{} API for each module, along
with a quick high-level summary of what it does.

\par
The APIs are all specified in C, as this provides a consistent language and is
explicit about data types which means there's no need for a separate Python
specification.  The C code is frequently wrapped with Python (via ctypes), but
modules are typically written in C code as they run considerably faster when
it is all native code.

\section{Manager}
The manager is what coordinates a fuzz job.  It decides which seeds to use,
which mutators to run and sends this information to the client, which kicks
off one or more Main Fuzzers.  The client will then also handle getting the
results back to the manager.

\section{Fuzzer}
This will run many iterations of a single seed and a single mutator against a
target program.  For efficiency, this will be run on the same computer (which
means same O/S) as the target binary.  This component will be an executable that
the manager executes on each of the target systems.  The arguments for this
function are defined in the usage function of the fuzzer.

\section{Mutator}
\label{mutator}
\input{api_mutator}

\section{Driver}
\label{driver}
\input{api_driver}

\section{Instrumentation}
\label{instrumentation}
\input{api_instrumentation}

\section{Structures}
\label{structures}
\input{api_structures}

\section{Helper Utilities}
\label{helpers}
\input{helpers}


%\section{Database}
% TODO: document me!

%\section{Tracer}
% TODO: document me!

%\section{Input Generator}
% TODO: create me and then document me!

\end{document}

